查看原文
其他

ELK告警插件-elastalert2 实践,支持elk8.0版本,企微机器人告警实现

曾哥 大侠之运维 2023-07-22

最近刚把生产的ELK搭建完成,前面文章也有介绍,然后就在思考把日志监控告警也做起来,因为人力问题,既要处理生产问题,又要做一些日常运维工作,所以日志监控的调研和完成就放在周末来做了。


简单说下,目前的运维现状,运维部门是新建立的,之前都是研发自管的,各自玩各自的,所以有蛮多的问题,有很多非标的建设,其实这种是很痛苦,最近在做的话,就是梳理不同的系统。


基本就是从0到1的建设吧,之前在建设elk的时候,其实也有考虑过,后续的日志监控要怎么做,本来最初的想法是自己去写,但是时间来不及,也没有那么多的精力去做这些事。


在很早之前的话,是有用过一些插件的,elasticalert,sentinl,前者的话,很早之前就不更新了,后者的话,目前也是只支持到7版本,所以就看到了elastalert2,看了下最新的更新是在近期,而且文档也很完善,虽然都是英文。


elastalert2参考资料

文档:https://elastalert2.readthedocs.io/en/latest/index.htmlgithub地址:https://github.com/jertel/elastalert2

这个插件的话,是支持docker部署及k8上部署的,相关的docker file及helm文件都有提供,基本是开箱即用了。


我这里是直接用本地python起的,有docker或者k8需求的,可以自己去看下。


所需软件及版本

python 3.10opensll 1.1.1 (python 3.10需要)

安装python的话,这里就不细讲了


安装步骤:

pip install elastalert2 (可能会有setuptools版本低的情况,自行更新)git clone https://github.com/jertel/elastalert2.gitpython setup.py install

两个配置文件:

一个是基础配置,在examples下面有基础配置

#必须配置项#告警规则目录rules_folder: examples/rulesrun_every: minutes: 1buffer_time: minutes: 15es_host: es ipes_port: 9200
#非必须配置#因为我是开启了鉴权的,所有需要开启ssl认证use_ssl: Truees_username: useres_password: passwdca_certs: ./http_ca.crt#会建立一个对应d的索引,后面可以直接去建立writeback_index: elastalert_status#retry window for failed alerts.alert_time_limit: days: 2

然后就是告警规则的配置了

默认是在examples下面的rules文件夹下,已经有蛮多的基础配置了,可以根据需要去配置,我这里配置了一个frequency类型的作为测试。


frequency这种类型的话,更符合日常的一个告警措施,可以根据时间范围内,出现的次数进行预警。


支持蛮多的告警途径,可以看下官方的介绍,我这里用到的是post途径,然后对数据进行处理,通过企微机器人进行告警,之前的prometheus也是通过这个告警的,数据格式不同,做了下处理。


支持的告警途径:


关于rule的配置可以看下:

#可以针对字段做一些添加,这个策略的话,就是30分钟内出现50次404就告警#query 也可以根据一些实际的需求进行调整#而且支持多个rule配置文件name: "Exemple webhook alert"type: frequencyindex: ng*use_strftime_index: truefilter:- query: query_string: query: "status: 404"num_events: 50timeframe: hours: 0.5realert: minutes: 0include: ["time_local","fields.host_ip"]alert_text: "Alerts at {0} on the host {1}.\n```"alert_text_args: ["timestamp","status"]alert: posthttp_post_url: "http://192.168.200.9:5001"

在启动之前,需要做一个index的初始化,直接执行:

如果开了鉴权的,也可以做个测试,是否可以连通elasticsearch

$elastalert-create-indexNew index name (Default elastalert_status)Name of existing index to copy (Default None)New index elastalert_status createdDone!

rule配置文件准备好的,也可以做个测试,检测配置文件是否正常

通过如下命令可以完成:

#这个命令也可以通过 -h 然后帮助#这条命令只是检测配置文件是否正常#如果要确认是告警是否能触发的话,需要加 --alertelastalert-test-rule ./examples/rules/exemple_discord_any.yaml --config=./examples/config.yaml

其实在最开始我测试的时候,一直报0hit,其实是索引配置的有点问题,可以自己去多测试几次。

就是这个问题,不过这个回答,也只是建议

当你加了--alert去测试的时候,如果有匹配到的,那么就可以触发告警了,类似这样

企微机器人上实际的效果是这样的:

当然了,告警里面的一些字段的话,可以自己去定义,这个只是一个初版,整个路走通了。

后面的话,可能就是具体的一些日志关键字,增加告警恢复的策略等,后面有时间的话,再来更新下。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存